package com.example.libpro.DBEntity;

import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Environment;
import android.util.Log;

import java.io.File;

public class DataBaseContext extends ContextWrapper {

    private static final String TAG = "DataBaseContext";
    private Context mContext;

    public DataBaseContext(Context context) {
        super(context);
        this.mContext = context;
    }

    /**
     * 重写数据库路径，指向公共Download目录下的libpro文件夹
     * 适配Android 12+的存储权限机制
     */
    @Override
    public File getDatabasePath(String name) {
        // 获取适配Android 12+的libpro目录路径
        File libproDir = getLibproDownloadDir();
        if (libproDir == null) {
            // 路径获取失败时，降级使用应用私有目录避免崩溃
            Log.e(TAG, "无法获取公共Download目录，将使用应用私有目录");
            return super.getDatabasePath(name);
        }

        // 确保目录存在（适配Android 12+的目录创建权限）
        if (!libproDir.exists()) {
            boolean isCreated = libproDir.mkdirs();
            if (!isCreated) {
                Log.e(TAG, "创建目录失败: " + libproDir.getAbsolutePath());
                return super.getDatabasePath(name); // 失败时降级到私有目录
            }
        }

        // 拼接数据库文件完整路径
        File dbFile = new File(libproDir, name);
        Log.i(TAG, "数据库文件路径: " + dbFile.getAbsolutePath());
        return dbFile;
    }

    /**
     * 获取公共Download目录下的libpro文件夹
     * 适配Android 12+的公共目录访问规则
     */
    private File getLibproDownloadDir() {
        try {
            // 获取系统公共Download目录（Android 10+推荐方式）
            File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
            if (downloadDir == null) {
                Log.e(TAG, "公共Download目录不存在");
                return null;
            }

            // 检查Download目录是否可读写（Android 12+权限检查辅助）
            if (!isDirectoryWritable(downloadDir)) {
                Log.w(TAG, "公共Download目录不可写，可能是权限问题");
            }

            // 拼接libpro子目录
            return new File(downloadDir, "libpro");
        } catch (Exception e) {
            Log.e(TAG, "获取目录失败: " + e.getMessage());
            return null;
        }
    }

    /**
     * 检查目录是否可写（适配Android 12+的权限验证）
     */
    private boolean isDirectoryWritable(File dir) {
        if (dir == null || !dir.exists()) {
            return false;
        }
        // 通过创建临时文件验证写入权限
        try {
            File tempFile = File.createTempFile("test", ".tmp", dir);
            boolean result = tempFile.exists();
            tempFile.delete();
            return result;
        } catch (Exception e) {
            return false;
        }
    }

    // 重写数据库打开方法，确保使用自定义路径
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
    }

    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name).getAbsolutePath(), factory, errorHandler);
    }
}